# Lux Bootstrap 4 — Ordre de mission de mise à jour (agent)

Ce fichier est destiné à un agent IA. Il est exécutable tel quel : l'agent applique la procédure ci-dessous de bout en bout sur la copie du thème Lux Bootstrap 4 de l'utilisateur.

- **Partie 1** : 101 corrections de bug. À appliquer après une confirmation globale.
- **Partie 2** : une évolution fonctionnelle optionnelle (tri produits étendu de 4/5 à 8 options). Ne jamais l'appliquer sans une **seconde** confirmation explicite et distincte.

---

## 0. Prérequis bloquants

Vérifier chaque point. Au premier échec : **stopper**, expliquer le problème à l'utilisateur, ne rien modifier.

1. **MCP Kiubi Designer connecté** (https://aide.kiubi.com/mcp-designer-generalites.html).
2. **Racine du thème identifiée** : le dossier contenant `theme.xml` et au moins un des sous-dossiers de langue `de/`, `en/`, `es/` ou `fr/`. Tous les chemins de ce document sont relatifs à cette racine, notée `<theme>/`. Si plusieurs candidats ou aucun : demander à l'utilisateur.
   - Lister les langues présentes. Une langue absente n'est pas une erreur : tous les correctifs qui s'y rapportent (parties 1 et 2) prennent le statut `LANGUE_ABSENTE` et ne sont pas traités (R4).
3. **Filet de sécurité** :
   - Dépôt git : créer une branche dédiée `fix/maj-lux-bt4` avant toute modification.
   - Sinon : demander à l'utilisateur de confirmer qu'une sauvegarde existe. Attendre la réponse.

---

## 1. Règles d'exécution

Ces règles s'appliquent à toutes les étapes et priment sur toute autre interprétation.

- **R1 — Encodage ISO-8859-1.** Le ruleset du MCP impose l'encodage ISO-8859-1 et les entités HTML nommées. Pour un rechercher-remplacer, appliquer en plus :
  - Lire et écrire les fichiers en `latin-1`. Ne jamais laisser un outil les réencoder en UTF-8.
  - Chercher les « Avant » accentués bruts (`ü`, `ß`, `º`…) dans le contenu **décodé en latin-1**. Une recherche en UTF-8 ne les trouve pas, et le correctif serait classé à tort `DIVERGENT` ou `DEJA_APPLIQUE`.
  - Après chaque écriture, `file -I` ne doit jamais renvoyer `utf-8`.
- **R2 — Localisation par texte.** Les correctifs se repèrent uniquement par la chaîne « Avant » exacte (sensible à la casse et aux espaces). Aucun numéro de ligne n'est fourni.
- **R3 — Périmètre strict.** Ne remplacer que les chaînes listées. Pas de reformatage, de réindentation ou de correction annexe. Toute autre anomalie repérée doit être **signalée** dans le rapport final, jamais corrigée.
- **R4 — Statut de chaque correctif**, déterminé avant toute modification :
  - `LANGUE_ABSENTE` : le dossier de langue du fichier (premier segment du chemin : `de/`, `en/`, `es/` ou `fr/`) n'existe pas dans `<theme>/`. Ignorer le correctif sans le signaler comme une erreur ; ne pas créer le dossier ni le fichier. Ce statut prime sur tous les autres.
  - `A_APPLIQUER` : le fichier contient « Avant » exactement « Nb » fois.
  - `DEJA_APPLIQUE` : « Avant » est absent et « Après » est présent. Ce n'est pas une erreur, la copie est simplement déjà à jour sur ce point.
  - `DIVERGENT` : tout autre cas (fichier absent alors que son dossier de langue existe, « Avant » trouvé un nombre de fois différent de « Nb », ni « Avant » ni « Après » présents). Ne pas toucher au fichier. Signaler le cas avec le contexte trouvé.
- **R5 — Remplacement.** Pour un correctif `A_APPLIQUER`, remplacer toutes les occurrences (« Nb ») de « Avant » par « Après », puis relire le fichier pour confirmer.
- **R6 — Ordre des parties.** La partie 1 passe toujours en premier. Les correctifs marqués `P2` dans la colonne « Note » portent sur une ligne que la partie 2 réécrit entièrement. Les appliquer quand même en partie 1 : c'est sans conflit, la partie 2 remplace ensuite le bloc complet.
- **R7 — Hors thème.** Ne modifier aucun fichier hors de `<theme>/`, ni ce document.

---

## 2. Procédure

Le démarrage de session du MCP Kiubi Designer (règles, documentation, `validate_theme` initial) est supposé fait. Le rapport `validate_theme` initial sert de **référence** : les erreurs et avertissements préexistants ne sont pas imputables à cette mise à jour.

### Étape 1 — Diagnostic de la partie 1 (lecture seule)

Calculer le statut (R4) de chaque correctif de la section 3. Présenter ensuite à l'utilisateur :

- les langues présentes et les langues absentes ;
- le décompte par statut (`A_APPLIQUER` / `DEJA_APPLIQUE` / `DIVERGENT` / `LANGUE_ABSENTE`) ;
- la liste des `DEJA_APPLIQUE` (ID seulement), en précisant qu'ils sont ignorés car déjà résolus ;
- le détail de chaque `DIVERGENT` (ID, fichier, ce qui a été trouvé).

### Étape 2 — Confirmation de la partie 1

Poser explicitement la question :

> **J'applique les N correctifs `A_APPLIQUER` de la partie 1 ?** (oui / non)

Attendre la réponse. Sur « non » : passer directement à l'étape 6.

### Étape 3 — Application de la partie 1

1. Appliquer chaque correctif `A_APPLIQUER` (R1, R5).
2. Rappeler `validate_theme`. Comparer au rapport de référence : **aucune nouvelle erreur** n'est tolérée.
   - Nouvelle erreur : stopper, la signaler avec le fichier concerné, proposer une correction, attendre une décision. Ne rien committer.
3. Dépôt git : committer avec `fix(theme): applique les correctifs Lux BT4 (partie 1)`.

### Étape 4 — Diagnostic et confirmation de la partie 2

1. Calculer le statut de chacun des 16 fichiers de la section 4 (règles de diagnostic données en section 4). Les fichiers d'une langue absente prennent le statut `LANGUE_ABSENTE` et ne sont pas traités.
2. Expliquer à l'utilisateur, en une phrase, qu'il s'agit d'une **évolution fonctionnelle**, pas d'un correctif : le tri des listes produits passe à 8 options (produit, prix, date de disponibilité et note, chacun croissant et décroissant).
3. Poser explicitement la question :

> **J'applique aussi l'évolution optionnelle du tri produits (partie 2) ?** (oui / non)

Sans « oui » explicite, ne rien appliquer et passer à l'étape 6.

### Étape 5 — Application de la partie 2

1. Pour chaque fichier `A_APPLIQUER`, remplacer le bloc `<div class="dropdown-menu dropdown-menu-right" aria-labelledby="tri">…</div>` complet par le bloc cible. Conserver l'indentation d'origine de la ligne.
2. Rappeler `validate_theme`. Même règle qu'à l'étape 3.
3. Dépôt git : committer avec `feat(theme): etend le tri produits a 8 options (partie 2)`.

### Étape 6 — Rapport final

Remettre à l'utilisateur :

- langues traitées et langues ignorées car absentes ;
- partie 1 : nombre de correctifs appliqués, déjà appliqués, divergents (avec le détail des divergents) et ignorés pour langue absente ;
- partie 2 : appliquée ou non, avec le statut de chaque fichier ;
- résultat de `validate_theme` comparé à la référence ;
- anomalies hors périmètre repérées (R3) ;
- dépôt git : nom de la branche et commits créés. **Ne pas merger** sans demande explicite de l'utilisateur.

---

## 3. Partie 1 — Corrections de bug

Colonnes : **ID** (identifiant à citer dans les échanges), **Fichier** (relatif à `<theme>/`), **Avant** (chaîne exacte à trouver), **Après** (chaîne de remplacement exacte), **Nb** (nombre d'occurrences attendu), **Note**.

### Allemand (`de/`)

| ID | Fichier | Avant | Après | Nb | Note |
|---|---|---|---|---|---|
| P1-001 | `de/composants/annonce/index.html` | `aria-label="Close"` | `aria-label="Schlie&szlig;en"` | 1 |  |
| P1-002 | `de/includes/filtres.html` | `<h5>Price</h5>` | `<h5>Preis</h5>` | 1 |  |
| P1-003 | `de/includes/produits.html` | `Verfügbarkeitsdatum` | `Verf&uuml;gbarkeitsdatum` | 1 | P2 |
| P1-004 | `de/modules/404/404.html` | `Zurück zur Startseite` | `Zur&uuml;ck zur Startseite` | 1 |  |
| P1-005 | `de/modules/fermeture/fermeture.html` | `wünschen` | `w&uuml;nschen` | 1 |  |
| P1-006 | `de/produits/simple/index.html` | `>More info</a>` | `>Mehr erfahren</a>` | 1 |  |
| P1-007 | `de/produits/simple/index.html` | `(instead of {prix_variante_barre})` | `(anstatt {prix_variante_barre})` | 1 |  |
| P1-008 | `de/templates/banniere_pleine_page/index.html` | `- Return to homepage"` | `- Zur&uuml;ck zur Startseite"` | 2 |  |
| P1-009 | `de/templates/barre_laterale_droite/index.html` | `- Return to homepage"` | `- Zur&uuml;ck zur Startseite"` | 2 |  |
| P1-010 | `de/templates/barre_laterale_gauche/index.html` | `- Return to homepage"` | `- Zur&uuml;ck zur Startseite"` | 2 |  |
| P1-011 | `de/templates/sans_barre_laterale/index.html` | `- Return to homepage"` | `- Zur&uuml;ck zur Startseite"` | 2 |  |
| P1-012 | `de/widgets/blog/poster_commentaire/index.html` | `muss jedoch erst validiert` | `muss jedoch erst von {site_nom} validiert` | 1 |  |
| P1-013 | `de/widgets/catalogue/liste_categories/carrousel/index.html` | `>View details</a>` | `>Details ansehen</a>` | 1 |  |
| P1-014 | `de/widgets/catalogue/liste_categories/index.html` | `>View details</a>` | `>Details ansehen</a>` | 1 |  |
| P1-015 | `de/widgets/catalogue/liste_produits/grille_4_col/index.html` | `Verf&uuml;gbarkeitsdatum/a>` | `Verf&uuml;gbarkeitsdatum</a>` | 1 | P2 |
| P1-016 | `de/widgets/catalogue/liste_produits/liste.html` | `Verfügbar ab` | `Verf&uuml;gbar ab` | 1 |  |
| P1-017 | `de/widgets/catalogue/liste_produits/liste.html` | `nicht verfügbar` | `nicht verf&uuml;gbar` | 1 |  |
| P1-018 | `de/widgets/catalogue/liste_produits/liste.html` | `Hinzugefügt` | `Hinzugef&uuml;gt` | 1 |  |
| P1-019 | `de/widgets/catalogue/liste_produits/produit_detail/liste.html` | `Verfügbar ab` | `Verf&uuml;gbar ab` | 1 |  |
| P1-020 | `de/widgets/catalogue/liste_produits/produit_detail/liste.html` | `nicht verfügbar` | `nicht verf&uuml;gbar` | 1 |  |
| P1-021 | `de/widgets/catalogue/liste_produits/produit_detail/liste.html` | `Hinzugefügt` | `Hinzugef&uuml;gt` | 1 |  |
| P1-022 | `de/widgets/catalogue/poster_commentaire/index.html` | `Melden Sie sich an<a/>,` | `Melden Sie sich an</a>,` | 1 |  |
| P1-023 | `de/widgets/catalogue/poster_commentaire/index.html` | `muss zuerst validiert` | `muss zuerst von {site_nom} validiert` | 1 |  |
| P1-024 | `de/widgets/catalogue/poster_commentaire/index.html` | `füllen` | `f&uuml;llen` | 1 |  |
| P1-025 | `de/widgets/catalogue/poster_commentaire/index.html` | `Übereinstimmung` | `&Uuml;bereinstimmung` | 1 |  |
| P1-026 | `de/widgets/catalogue/poster_commentaire/index.html` | `ausüben` | `aus&uuml;ben` | 1 |  |
| P1-027 | `de/widgets/catalogue/poster_commentaire/index.html` | `für dieses Produkt` | `f&uuml;r dieses Produkt` | 1 |  |
| P1-028 | `de/widgets/commandes/livraison/index.html` | `btn-lg" title="Return to cart">` | `btn-lg">` | 1 |  |
| P1-029 | `de/widgets/commandes/livraison/transporteurs.html` | `p-0 mb-5 d-none d-md-flex` | `p-0 mb-5 m-0 d-none d-md-flex` | 1 |  |
| P1-030 | `de/widgets/commandes/livraison/transporteurs.html` | `title="Date de livraion"` | `title="Lieferdatum"` | 1 |  |
| P1-031 | `de/widgets/commandes/livraison/transporteurs.html` | `title="Heure de livraion"` | `title="Lieferzeitpunkt"` | 1 |  |
| P1-032 | `de/widgets/commandes/livraison/transporteurs.html` | `title="Date de retrait"` | `title="Abholdatum"` | 1 |  |
| P1-033 | `de/widgets/commandes/livraison/transporteurs.html` | `title="Heure de retrait"` | `title="Abholzeit"` | 1 |  |
| P1-034 | `de/widgets/commandes/livraison/transporteurs.html` | `value="Continue"` | `value="Fortfahren"` | 1 |  |
| P1-035 | `de/widgets/commandes/paiement/cm_cic.html` | `müssen` | `m&uuml;ssen` | 1 |  |
| P1-036 | `de/widgets/commandes/paiement/index.html` | `- View details"` | `- Details ansehen"` | 2 |  |
| P1-037 | `de/widgets/commandes/paiement/index.html` | `Die Bestellung wird innerhalb eines Zeitraums von <strong>{delai_livraison}</strong> <!-- BEGIN:delai_livraison --> von {intitule_transporteur} bearbeitet.<!-- END:delai_livraison -->` | `Die Bestellung wird von <strong>{intitule_transporteur}</strong> <!-- BEGIN:delai_livraison --> innerhalb eines Zeitraums von {delai_livraison} <!-- END:delai_livraison --> bearbeitet.` | 1 |  |
| P1-038 | `de/widgets/commandes/paiement/payline.html` | `Kreditkarte/h1>` | `Kreditkarte</h1>` | 1 |  |
| P1-039 | `de/widgets/commandes/paiement/sur_place/cheque.html` | `abschließen` | `abschlie&szlig;en` | 1 |  |
| P1-040 | `de/widgets/commandes/paiement/virement.html` | `Banküberweisung` | `Bank&uuml;berweisung` | 1 |  |
| P1-041 | `de/widgets/commandes/paiement/virement.html` | `bitte überweisen` | `bitte &uuml;berweisen` | 1 |  |
| P1-042 | `de/widgets/commandes/paiement/virement.html` | `Überweisungszweck` | `&Uuml;berweisungszweck` | 1 |  |
| P1-043 | `de/widgets/communication/formulaires/index.html` | `Fräulein` | `Fr&auml;ulein` | 1 |  |
| P1-044 | `de/widgets/compte/identification/index.html` | `vorübergehend` | `vor&uuml;bergehend` | 1 |  |
| P1-045 | `de/widgets/compte/inscription/index.html` | `Bestätigen` | `Best&auml;tigen` | 1 |  |
| P1-046 | `de/widgets/compte/inscription/index.html` | `persönlichen` | `pers&ouml;nlichen` | 1 |  |
| P1-047 | `de/widgets/compte/inscription/index.html` | `Spamfilter für` | `Spamfilter f&uuml;r` | 1 |  |
| P1-048 | `de/widgets/compte/inscription/index.html` | `überprüfen` | `&uuml;berpr&uuml;fen` | 1 |  |
| P1-049 | `de/widgets/compte/inscription/index.html` | `vorübergehend` | `vor&uuml;bergehend` | 1 |  |
| P1-050 | `de/widgets/compte/inscription/mail.html` | `Glückwunsch` | `Gl&uuml;ckwunsch` | 1 |  |
| P1-051 | `de/widgets/compte/inscription/mail.html` | `Grüßen` | `Gr&uuml;&szlig;en` | 1 |  |
| P1-052 | `de/widgets/compte/tableau_bord/abonnements.html` | `ändern</a>` | `&auml;ndern</a>` | 1 |  |
| P1-053 | `de/widgets/compte/tableau_bord/abonnements.html` | `Web-Identität` | `Web-Identit&auml;t` | 1 |  |
| P1-054 | `de/widgets/compte/tableau_bord/abonnements.html` | `Gemä&szlig;` | `Gem&auml;&szlig;` | 1 |  |
| P1-055 | `de/widgets/compte/tableau_bord/abonnements.html` | `ausüben` | `aus&uuml;ben` | 1 |  |
| P1-056 | `de/widgets/compte/tableau_bord/abonnements.html` | `value="Bestätigen"` | `value="Best&auml;tigen"` | 1 |  |
| P1-057 | `de/widgets/compte/tableau_bord/avatar.html` | `alt="Mon avatar"` | `alt="Mein Avatar"` | 1 |  |
| P1-058 | `de/widgets/compte/tableau_bord/avatar.html` | `ausüben` | `aus&uuml;ben` | 1 |  |
| P1-059 | `de/widgets/compte/tableau_bord/cloture.html` | `führt` | `f&uuml;hrt` | 1 |  |
| P1-060 | `de/widgets/compte/tableau_bord/cloture.html` | `Informationen über` | `Informationen &uuml;ber` | 1 |  |
| P1-061 | `de/widgets/compte/tableau_bord/id_web.html` | `<!-- section:main -->` | `<!-- END:main -->` | 1 |  |
| P1-062 | `de/widgets/compte/tableau_bord/id_web.html` | `werden für` | `werden f&uuml;r` | 1 |  |
| P1-063 | `de/widgets/compte/tableau_bord/id_web.html` | `ausüben` | `aus&uuml;ben` | 1 |  |
| P1-064 | `de/widgets/compte/tableau_bord/index.html` | `Verwaltung Ihres Kundenkontos.` | `Verwaltung Ihres Kundenkontos, <strong>{prenom_client} {nom_client}</strong>.` | 1 |  |
| P1-065 | `de/widgets/compte/tableau_bord/infos_perso.html` | `werden für` | `werden f&uuml;r` | 1 |  |
| P1-066 | `de/widgets/compte/tableau_bord/infos_perso.html` | `ausüben` | `aus&uuml;ben` | 1 |  |
| P1-067 | `de/widgets/compte/tableau_bord/mail_bon_reduction.html` | `{devise} für` | `{devise} f&uuml;r` | 1 |  |
| P1-068 | `de/widgets/compte/tableau_bord/mail_bon_reduction.html` | `gültig` | `g&uuml;ltig` | 1 |  |
| P1-069 | `de/widgets/compte/tableau_bord/mail_bon_reduction.html` | `Grü&szlig;en` | `Gr&uuml;&szlig;en` | 1 |  |
| P1-070 | `de/widgets/compte/tableau_bord/mail_motdepasse_perdu.html` | `(gültig für` | `(g&uuml;ltig f&uuml;r` | 1 |  |
| P1-071 | `de/widgets/compte/tableau_bord/mail_motdepasse_perdu.html` | `Grü&szlig;en` | `Gr&uuml;&szlig;en` | 1 |  |
| P1-072 | `de/widgets/compte/tableau_bord/motdepasse.html` | `werden für` | `werden f&uuml;r` | 1 |  |
| P1-073 | `de/widgets/compte/tableau_bord/motdepasse.html` | `ausüben` | `aus&uuml;ben` | 1 |  |
| P1-074 | `de/widgets/compte/tableau_bord/motdepasse_perdu.html` | `Kürze` | `K&uuml;rze` | 1 |  |
| P1-075 | `de/widgets/site_web/bloc_extrait/temoignages/index.html` | `{FILE "/en/includes/pagination.html"}` | `{FILE "/de/includes/pagination.html"}` | 1 |  |

### Anglais (`en/`)

| ID | Fichier | Avant | Après | Nb | Note |
|---|---|---|---|---|---|
| P1-076 | `en/widgets/commandes/livraison/dpd.html` | `3. Delivery/li>` | `3. Delivery</li>` | 1 |  |
| P1-077 | `en/widgets/compte/tableau_bord/id_web.html` | `<!-- section:main -->` | `<!-- END:main -->` | 1 |  |
| P1-078 | `en/widgets/compte/tableau_bord/index.html` | `customer account management.` | `customer account management, <strong>{prenom_client} {nom_client}</strong>.` | 1 |  |

### Espagnol (`es/`)

| ID | Fichier | Avant | Après | Nb | Note |
|---|---|---|---|---|---|
| P1-079 | `es/composants/annonce/index.html` | `aria-label="Close"` | `aria-label="Cerrar"` | 1 |  |
| P1-080 | `es/includes/filtres.html` | `<h5>Price</h5>` | `<h5>Precio</h5>` | 1 |  |
| P1-081 | `es/modules/fermeture/fermeture.html` | `xml:lang="en" lang="en"` | `xml:lang="es" lang="es"` | 1 |  |
| P1-082 | `es/templates/banniere_pleine_page/index.html` | `- Return to homepage"` | `- Volver a la p&aacute;gina principal"` | 2 |  |
| P1-083 | `es/templates/barre_laterale_droite/index.html` | `- Return to homepage"` | `- Volver a la p&aacute;gina principal"` | 2 |  |
| P1-084 | `es/templates/barre_laterale_gauche/index.html` | `- Return to homepage"` | `- Volver a la p&aacute;gina principal"` | 2 |  |
| P1-085 | `es/templates/sans_barre_laterale/index.html` | `- Return to homepage"` | `- Volver a la p&aacute;gina principal"` | 2 |  |
| P1-086 | `es/widgets/catalogue/liste_produits/grille_4_col/index.html` | `>ProProductoduct</a>` | `>Producto</a>` | 1 | P2 |
| P1-087 | `es/widgets/catalogue/poster_commentaire/index.html` | `debe ser validado antes` | `debe ser validado por {site_nom} antes` | 1 |  |
| P1-088 | `es/widgets/commandes/livraison/transporteurs.html` | `p-0 mb-5 d-none d-md-flex` | `p-0 mb-5 m-0 d-none d-md-flex` | 1 |  |
| P1-089 | `es/widgets/commandes/livraison/transporteurs.html` | `title="Date de livraion"` | `title="Fecha de entrega"` | 1 |  |
| P1-090 | `es/widgets/commandes/livraison/transporteurs.html` | `title="Heure de livraion"` | `title="Hora de entrega"` | 1 |  |
| P1-091 | `es/widgets/commandes/livraison/transporteurs.html` | `title="Date de retrait"` | `title="Fecha de recogida"` | 1 |  |
| P1-092 | `es/widgets/commandes/livraison/transporteurs.html` | `title="Heure de retrait"` | `title="Hora de recogida"` | 1 |  |
| P1-093 | `es/widgets/commandes/validation/commande.html` | `N.º de cliente` | `N.&ordm; de cliente` | 1 |  |
| P1-094 | `es/widgets/commandes/validation/mail_etat.html` | `pedido n.º` | `pedido n.&ordm;` | 1 |  |
| P1-095 | `es/widgets/communication/contact/index.html` | `name="act" value="Enviar"` | `name="act" value="send"` | 1 |  |
| P1-096 | `es/widgets/compte/tableau_bord/avatar.html` | `alt="Mon avatar"` | `alt="Mi avatar"` | 1 |  |
| P1-097 | `es/widgets/compte/tableau_bord/id_web.html` | `<!-- section:main -->` | `<!-- END:main -->` | 1 |  |
| P1-098 | `es/widgets/compte/tableau_bord/index.html` | `cuenta de cliente.` | `cuenta de cliente, <strong>{prenom_client} {nom_client}</strong>.` | 1 |  |

### Français (`fr/`)

| ID | Fichier | Avant | Après | Nb | Note |
|---|---|---|---|---|---|
| P1-099 | `fr/composants/annonce/index.html` | `aria-label="Close"` | `aria-label="Fermer"` | 1 |  |
| P1-100 | `fr/widgets/compte/tableau_bord/abonnements.html` | `active"">Abonnements</a>` | `active">Abonnements</a>` | 1 |  |
| P1-101 | `fr/widgets/compte/tableau_bord/id_web.html` | `<!-- section:main -->` | `<!-- END:main -->` | 1 |  |

---

## 4. Partie 2 — Évolution optionnelle : tri produits à 8 options

**Ce n'est pas une correction de bug.** Ne l'appliquer qu'après la confirmation de l'étape 4.

### Diagnostic d'un fichier

Dans chaque fichier, repérer l'unique ligne contenant `<div class="dropdown-menu dropdown-menu-right" aria-labelledby="tri">`.

- `DEJA_APPLIQUE` : le bloc est déjà identique au bloc cible (aux espaces près).
- `A_APPLIQUER` : le bloc correspond à la version d'origine, identifiable par sa signature :
  - tri **statique** (`liste_produits/index.html`, `liste_produits/grille_4_col/index.html`, `recherche/simple/catalogue.html`) : 4 liens `href="{lien_tri}=po"`, `=pi`, `=n` et `=d` ;
  - tri **dynamique** (`includes/produits.html`) : 5 liens `data-tri` dont `data-tri="price,-spotlight"` et `data-tri="date,-spotlight"`.
- `DIVERGENT` : tout autre contenu (bloc personnalisé, absent ou dupliqué). Ne pas toucher au fichier. Montrer le bloc trouvé à l'utilisateur.

Le bloc cible ne doit apparaître qu'une fois par fichier, sur une seule ligne.

### Allemand (`de/`)

**P2-01 `de/includes/produits.html`** (tri dynamique)

```html
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="tri"><a href="#" data-tri="-spotlight,name" class="dropdown-item">Produkt aufsteigend</a> <a href="#" data-tri="-spotlight,-name" class="dropdown-item">Produkt absteigend</a> <a href="#" data-tri="-spotlight,price" class="dropdown-item">Preis aufsteigend</a> <a href="#" data-tri="-spotlight,-price" class="dropdown-item">Preis absteigend</a> <a href="#" data-tri="-spotlight,date" class="dropdown-item">Verf&uuml;gbarkeitsdatum aufsteigend</a> <a href="#" data-tri="-spotlight,-date" class="dropdown-item">Verf&uuml;gbarkeitsdatum absteigend</a> <a href="#" data-tri="-spotlight,rate" class="dropdown-item">Bewertung aufsteigend</a> <a href="#" data-tri="-spotlight,-rate" class="dropdown-item">Bewertung absteigend</a> </div>
```

**P2-02 `de/widgets/catalogue/liste_produits/index.html` · P2-03 `de/widgets/catalogue/liste_produits/grille_4_col/index.html`** (tri statique)

```html
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="tri"> <a href="{lien_tri}=alpha" class="dropdown-item">Produkt aufsteigend</a> <a href="{lien_tri}=alphaDESC" class="dropdown-item">Produkt absteigend</a> <a href="{lien_tri}=prix" class="dropdown-item">Preis aufsteigend</a> <a href="{lien_tri}=prixDESC" class="dropdown-item">Preis absteigend</a> <a href="{lien_tri}=date" class="dropdown-item">Verf&uuml;gbarkeitsdatum aufsteigend</a> <a href="{lien_tri}=dateDESC" class="dropdown-item">Verf&uuml;gbarkeitsdatum absteigend</a> <a href="{lien_tri}=note" class="dropdown-item">Bewertung aufsteigend</a> <a href="{lien_tri}=noteDESC" class="dropdown-item">Bewertung absteigend</a> </div>
```

**P2-04 `de/widgets/recherche/simple/catalogue.html`** (tri statique, libellé de date court)

```html
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="tri"> <a href="{lien_tri}=alpha" class="dropdown-item">Produkt aufsteigend</a> <a href="{lien_tri}=alphaDESC" class="dropdown-item">Produkt absteigend</a> <a href="{lien_tri}=prix" class="dropdown-item">Preis aufsteigend</a> <a href="{lien_tri}=prixDESC" class="dropdown-item">Preis absteigend</a> <a href="{lien_tri}=date" class="dropdown-item">Verf&uuml;gbarkeit aufsteigend</a> <a href="{lien_tri}=dateDESC" class="dropdown-item">Verf&uuml;gbarkeit absteigend</a> <a href="{lien_tri}=note" class="dropdown-item">Bewertung aufsteigend</a> <a href="{lien_tri}=noteDESC" class="dropdown-item">Bewertung absteigend</a> </div>
```

### Anglais (`en/`)

**P2-05 `en/includes/produits.html`** (tri dynamique)

```html
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="tri"><a href="#" data-tri="-spotlight,name" class="dropdown-item">Ascending product</a> <a href="#" data-tri="-spotlight,-name" class="dropdown-item">Descending product</a> <a href="#" data-tri="-spotlight,price" class="dropdown-item">Ascending price</a> <a href="#" data-tri="-spotlight,-price" class="dropdown-item">Descending price</a> <a href="#" data-tri="-spotlight,date" class="dropdown-item">Ascending availability date</a> <a href="#" data-tri="-spotlight,-date" class="dropdown-item">Descending availability date</a> <a href="#" data-tri="-spotlight,rate" class="dropdown-item">Ascending rating</a> <a href="#" data-tri="-spotlight,-rate" class="dropdown-item">Descending rating</a> </div>
```

**P2-06 `en/widgets/catalogue/liste_produits/index.html` · P2-07 `en/widgets/catalogue/liste_produits/grille_4_col/index.html`** (tri statique)

```html
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="tri"> <a href="{lien_tri}=alpha" class="dropdown-item">Ascending product</a> <a href="{lien_tri}=alphaDESC" class="dropdown-item">Descending product</a> <a href="{lien_tri}=prix" class="dropdown-item">Ascending price</a> <a href="{lien_tri}=prixDESC" class="dropdown-item">Descending price</a> <a href="{lien_tri}=date" class="dropdown-item">Ascending availability date</a> <a href="{lien_tri}=dateDESC" class="dropdown-item">Descending availability date</a> <a href="{lien_tri}=note" class="dropdown-item">Ascending rating</a> <a href="{lien_tri}=noteDESC" class="dropdown-item">Descending rating</a> </div>
```

**P2-08 `en/widgets/recherche/simple/catalogue.html`** (tri statique, libellé de date court)

```html
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="tri"> <a href="{lien_tri}=alpha" class="dropdown-item">Ascending product</a> <a href="{lien_tri}=alphaDESC" class="dropdown-item">Descending product</a> <a href="{lien_tri}=prix" class="dropdown-item">Ascending price</a> <a href="{lien_tri}=prixDESC" class="dropdown-item">Descending price</a> <a href="{lien_tri}=date" class="dropdown-item">Ascending availability</a> <a href="{lien_tri}=dateDESC" class="dropdown-item">Descending availability</a> <a href="{lien_tri}=note" class="dropdown-item">Ascending rating</a> <a href="{lien_tri}=noteDESC" class="dropdown-item">Descending rating</a> </div>
```

### Espagnol (`es/`)

**P2-09 `es/includes/produits.html`** (tri dynamique)

```html
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="tri"><a href="#" data-tri="-spotlight,name" class="dropdown-item">Producto ascendente</a> <a href="#" data-tri="-spotlight,-name" class="dropdown-item">Producto descendente</a> <a href="#" data-tri="-spotlight,price" class="dropdown-item">Precio ascendente</a> <a href="#" data-tri="-spotlight,-price" class="dropdown-item">Precio descendente</a> <a href="#" data-tri="-spotlight,date" class="dropdown-item">Fecha de disponibilidad ascendente</a> <a href="#" data-tri="-spotlight,-date" class="dropdown-item">Fecha de disponibilidad descendente</a> <a href="#" data-tri="-spotlight,rate" class="dropdown-item">Calificaci&oacute;n ascendente</a> <a href="#" data-tri="-spotlight,-rate" class="dropdown-item">Calificaci&oacute;n descendente</a> </div>
```

**P2-10 `es/widgets/catalogue/liste_produits/index.html` · P2-11 `es/widgets/catalogue/liste_produits/grille_4_col/index.html`** (tri statique)

```html
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="tri"> <a href="{lien_tri}=alpha" class="dropdown-item">Producto ascendente</a> <a href="{lien_tri}=alphaDESC" class="dropdown-item">Producto descendente</a> <a href="{lien_tri}=prix" class="dropdown-item">Precio ascendente</a> <a href="{lien_tri}=prixDESC" class="dropdown-item">Precio descendente</a> <a href="{lien_tri}=date" class="dropdown-item">Fecha de disponibilidad ascendente</a> <a href="{lien_tri}=dateDESC" class="dropdown-item">Fecha de disponibilidad descendente</a> <a href="{lien_tri}=note" class="dropdown-item">Calificaci&oacute;n ascendente</a> <a href="{lien_tri}=noteDESC" class="dropdown-item">Calificaci&oacute;n descendente</a> </div>
```

**P2-12 `es/widgets/recherche/simple/catalogue.html`** (tri statique, libellé de date court)

```html
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="tri"> <a href="{lien_tri}=alpha" class="dropdown-item">Producto ascendente</a> <a href="{lien_tri}=alphaDESC" class="dropdown-item">Producto descendente</a> <a href="{lien_tri}=prix" class="dropdown-item">Precio ascendente</a> <a href="{lien_tri}=prixDESC" class="dropdown-item">Precio descendente</a> <a href="{lien_tri}=date" class="dropdown-item">Disponibilidad ascendente</a> <a href="{lien_tri}=dateDESC" class="dropdown-item">Disponibilidad descendente</a> <a href="{lien_tri}=note" class="dropdown-item">Calificaci&oacute;n ascendente</a> <a href="{lien_tri}=noteDESC" class="dropdown-item">Calificaci&oacute;n descendente</a> </div>
```

### Français (`fr/`)

**P2-13 `fr/includes/produits.html`** (tri dynamique)

```html
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="tri"><a href="#" data-tri="-spotlight,name" class="dropdown-item">Produit (A-Z)</a> <a href="#" data-tri="-spotlight,-name" class="dropdown-item">Produit (Z-A)</a> <a href="#" data-tri="-spotlight,price" class="dropdown-item">Prix croissant</a> <a href="#" data-tri="-spotlight,-price" class="dropdown-item">Prix d&eacute;croissant</a> <a href="#" data-tri="-spotlight,date" class="dropdown-item">Date de disponibilit&eacute; croissante</a> <a href="#" data-tri="-spotlight,-date" class="dropdown-item">Date de disponibilit&eacute; d&eacute;croissante</a> <a href="#" data-tri="-spotlight,rate" class="dropdown-item">Note croissante</a> <a href="#" data-tri="-spotlight,-rate" class="dropdown-item">Note d&eacute;croissante</a> </div>
```

**P2-14 `fr/widgets/catalogue/liste_produits/index.html` · P2-15 `fr/widgets/catalogue/liste_produits/grille_4_col/index.html`** (tri statique)

```html
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="tri"> <a href="{lien_tri}=alpha" class="dropdown-item">Produit (A-Z)</a> <a href="{lien_tri}=alphaDESC" class="dropdown-item">Produit (Z-A)</a> <a href="{lien_tri}=prix" class="dropdown-item">Prix croissant</a> <a href="{lien_tri}=prixDESC" class="dropdown-item">Prix d&eacute;croissant</a> <a href="{lien_tri}=date" class="dropdown-item">Date de disponibilit&eacute; croissante</a> <a href="{lien_tri}=dateDESC" class="dropdown-item">Date de disponibilit&eacute; d&eacute;croissante</a> <a href="{lien_tri}=note" class="dropdown-item">Note croissante</a> <a href="{lien_tri}=noteDESC" class="dropdown-item">Note d&eacute;croissante</a> </div>
```

**P2-16 `fr/widgets/recherche/simple/catalogue.html`** (tri statique, libellé de date court)

```html
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="tri"> <a href="{lien_tri}=alpha" class="dropdown-item">Produit (A-Z)</a> <a href="{lien_tri}=alphaDESC" class="dropdown-item">Produit (Z-A)</a> <a href="{lien_tri}=prix" class="dropdown-item">Prix croissant</a> <a href="{lien_tri}=prixDESC" class="dropdown-item">Prix d&eacute;croissant</a> <a href="{lien_tri}=date" class="dropdown-item">Disponibilit&eacute; croissante</a> <a href="{lien_tri}=dateDESC" class="dropdown-item">Disponibilit&eacute; d&eacute;croissante</a> <a href="{lien_tri}=note" class="dropdown-item">Note croissante</a> <a href="{lien_tri}=noteDESC" class="dropdown-item">Note d&eacute;croissante</a> </div>
```
